package com.bestcem.xm.user.dao.mapper;

import com.bestcem.xm.user.entity.mysql.UserSmtp;
import com.bestcem.xm.user.entity.pojo.UserSmtpDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 邮箱配置信息表
 *
 * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
 * @version v1.0
 * @date 2022/03/16 10:52
 */
@Mapper
public interface UserSmtpMapper {

    /**
     * 新增邮箱配置信息
     *
     * @param userSmtp 邮箱配置信息
     * @return int 插入成功的条数
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/16 10:53
     */
    int insert(UserSmtp userSmtp);

    /**
     * 有选择想的新增邮箱配置信息，为空则不插入
     *
     * @param userSmtp 邮箱配置信息
     * @return int 插入成功的条数
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/16 11:03
     */
    int insertSelective(UserSmtp userSmtp);

    /**
     * 根据组件id查询邮箱配置
     *
     * @param smtpId 邮箱配置id
     * @return com.bestcem.xm.user.entity.mysql.UserSmtp
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/16 11:03
     */
    UserSmtp selectByPrimaryKey(String smtpId);

    /**
     * 根据主键有选择的做更新
     *
     * @param userSmtp 邮箱配置信息
     * @return int 更新成功的条数
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/16 11:03
     */
    int updateByPrimaryKeySelective(UserSmtp userSmtp);

    /**
     * 更新邮箱配置信息
     *
     * @param userSmtp 邮箱配置信息
     * @return int 更新成功的条数
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/16 11:04
     */
    int updateByPrimaryKey(UserSmtp userSmtp);

    /**
     * 根据邮箱配置相关条件查询邮箱配置信息列表
     *
     * @param userSmtp 邮箱配置信息相关查询参数
     * @return java.util.List<com.bestcem.xm.user.entity.mysql.UserSmtp>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/17 11:47
     */
    List<UserSmtp> selectBySelective(UserSmtp userSmtp);

    /**
     * 根据邮箱配置id和公司id有选择的做更新
     *
     * @param userSmtp 邮箱配置信息
     * @return java.lang.Integer
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/17 11:57
     */
    Integer updateSelectiveByIdAndOrgId(UserSmtp userSmtp);

    /**
     * 根据公司id有选择的做更新
     *
     * @param userSmtp
     * @return java.lang.Integer
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/17 20:40
     */
    Integer updateSelectiveByOrgId(UserSmtp userSmtp);

    /**
     * 根据ids批量删除
     *
     * @param ids   smtpId列表
     * @param orgId 公司Id
     * @return java.lang.Integer
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/17 20:40
     */
    Integer deleteByIds(List<String> ids, String orgId);

    /**
     * 可选条件删除
     *
     * @param smtpDO 条件
     * @return java.lang.Integer
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/21 20:10
     */
    Integer deleteBySelective(UserSmtpDO smtpDO);

    /**
     * 查询指定公司下指定状态的邮箱配置数量
     *
     * @param orgId          公司id
     * @param validateStatus 邮箱验证状态列表
     * @return java.lang.Long
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/18 14:58
     */
    Long count(@Param("orgId") String orgId, @Param("validateStatus") List<Integer> validateStatus);

    /**
     * 分页查询邮箱配置信息
     *
     * @param orgId          公司id
     * @param validateStatus 验证状态列表
     * @param offset         偏移量
     * @param size           页大小
     * @param sort           升序降序
     * @param sortBy         排序字段
     * @return java.util.List<com.bestcem.xm.user.entity.pojo.UserSmtpDO>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/03/18 15:20
     */
    List<UserSmtpDO> listByPage(@Param("orgId") String orgId, @Param("validateStatus") List<Integer> validateStatus,
                                @Param("offset") int offset, @Param("size") Integer size, @Param("sort") String sort,
                                @Param("sortBy") String sortBy);

}